Une requête exécutée rapidement, mais lentement par la procédure

Une requête exécutée rapidement, mais lentement par la procédure


Problèmes de compilation par lots, de recompilation et de mise en cache des plans dans SQL Server 2005:

Le terme « détection de paramètres » désigne un processus par lequel l'environnement d'exécution de SQL Server « détecte » les valeurs de paramètres actuelles lors de la compilation ou de la recompilation et les transmet à l'optimiseur de requêtes afin qu'elles puissent être utilisées pour générer des plans d'exécution de requêtes potentiellement plus rapides. Le terme « actuel » fait référence aux valeurs de paramètres présentes dans l'appel d'instruction qui a provoqué une compilation ou une recompilation.

Cela revient à utiliser des « variables locales » dans vos requêtes de procédure stockée:

Solution lente:
CREATE PROCEDURE GetOrderForCustomers(@CustID varchar(20))
AS
BEGIN
    SELECT *
    FROM orders
    WHERE customerid = @CustID
END

Solution rapide:
CREATE PROCEDURE GetOrderForCustomersWithoutPS(@CustID varchar(20))
AS
BEGIN
    DECLARE @LocCustID varchar(20)
    SET @LocCustID = @CustID

    SELECT *
    FROM orders
    WHERE customerid = @LocCustID
END

Seyed Hamed Vahedi Seyed Hamed Vahedi     Fri, 2 October, 2020